package com.tianmao.swing.core;

import com.tianmao.swing.MyWebSocketServer;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import org.java_websocket.server.WebSocketServer;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Objects;

public class Main extends Application {
    private WebSocketServer server;

    @Override
    public void start(Stage primaryStage) {
        // 启动 WebSocket 服务器在一个单独的线程
        int port = 9999; // 使用一个端口来监听连接
        server = new MyWebSocketServer(new InetSocketAddress(port));
        try {
            server.start();
            System.out.println("服务器已启动并监听端口: " + port);
        } catch (Exception e) {
            System.err.println("启动服务器时出现错误: " + e.getMessage());
        }

        Server jettyServer = new Server(9998);
        new Thread(()->{
            // 创建 Jetty 服务器，监听端口
            try {
                // 创建资源处理器
                ResourceHandler resourceHandler = new ResourceHandler();
                // 设置静态资源的根目录，这里假设外部页面存放在项目根目录下的 "webapp" 文件夹中
                resourceHandler.setResourceBase(new File("webapp").getAbsolutePath());

                // 创建处理器列表
                HandlerList handlers = new HandlerList();
                handlers.addHandler(resourceHandler);
                handlers.addHandler(new DefaultHandler());

                // 将处理器列表设置到服务器
                jettyServer.setHandler(handlers);

                // 启动服务器
                jettyServer.start();
                jettyServer.join();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }).start();

        // 创建一个空的 Pane 作为根节点
        Pane root = new Pane();
        // 加载背景图片
        Image backgroundImage = new Image("file:background.jpg");
        ImageView backgroundImageView = new ImageView(backgroundImage);
        // 设置背景图片大小以适应窗口
        backgroundImageView.setFitWidth(500);
        backgroundImageView.setFitHeight(300);

        // 将背景图片添加到 Pane 中
        root.getChildren().add(backgroundImageView);

        // 创建一个 Text 对象并设置文本内容
        Text text = new Text("物联网标签打印系统服务启动中....");
        Text tip = new Text("窗口勿关！！");

        // 设置文本字体
        text.setFont(Font.font(24));
        tip.setFont(Font.font(24));

        // 设置文本的位置
        text.setX(70);
        text.setY(130);
        tip.setX(70);
        tip.setY(170);
        tip.setFill(Color.RED);

        // 为 Text 控件添加点击事件
        text.setOnMouseClicked(event -> {
            try {
                // 获取默认的桌面浏览器
                Desktop desktop = Desktop.getDesktop();
                if (desktop.isSupported(Desktop.Action.BROWSE)) {
                    // 打开指定的网页
                    desktop.browse(new URI("http://localhost:9998"));
                }
            } catch (IOException | URISyntaxException e) {
                e.printStackTrace();
            }
        });

        // 将文本添加到 Pane 中
        root.getChildren().add(text);
        root.getChildren().add(tip);
        // 设置场景的宽度和高度
        double width = 500;
        double height = 300;
        // 创建一个场景，将根节点和设置好的大小传入
        Scene scene = new Scene(root, width, height);
        primaryStage.setTitle("物联网标签打印系统V2.0");
        primaryStage.setScene(scene);
        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent event) {
                //关掉websocket
                if(Objects.nonNull(server)){
                    try {
                        server.stop();
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
                //关掉jetty
                try {
                    jettyServer.stop();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        });
        // 加载图标
        Image icon = new Image("file:logo.png");
        // 设置图标到舞台
        primaryStage.getIcons().add(icon);
        // 让窗体最小化
        primaryStage.show();
        try {
            // 获取默认的桌面浏览器
            Desktop desktop = Desktop.getDesktop();
            if (desktop.isSupported(Desktop.Action.BROWSE)) {
                // 打开指定的网页
                desktop.browse(new URI("http://localhost:9998"));
            }
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}